package cn.springcloud.api.apiUtils;


import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.*;
import lombok.extern.slf4j.Slf4j;


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 给文件添加水印
 * @author gc
 */
@Slf4j
public class WaterMarkUtil {

    /**
     * 将一个文件字节数组保存到 目标文件中  ，并给目标文件添加水印-》 水印文件
     * @param bytes  源文件数组
     * @param sourceFilePath  源文件保存的路径
     * @param sourceFileName  源文件名
     * @param text  水印文字
     * @param waterFilePath  水印文件保存的路径
     * @param waterFileName  水印文件名
     * @return
     */
    public static void addWatermark(byte[] bytes, String sourceFilePath, String sourceFileName, String text, String waterFilePath , String waterFileName) throws Exception {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        //保存到临时文件夹下
        try {
            File dir = new File(sourceFilePath);
            boolean isDir = dir.isDirectory();
            // 目录不存在则先建目录
            if (!isDir) {
                try {
                    dir.mkdirs();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            file = new File(sourceFilePath + File.separator + sourceFileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
        try {
            //添加水印
            addWaterMark(sourceFilePath + File.separator + sourceFileName,waterFilePath + File.separator + waterFileName,text,0,0);
        }catch (Exception e){
          //  log.error("添加水印失败");
            e.printStackTrace();
            throw  new Exception("添加水印失败");

        }
    }

    /**
     *
     * 【功能描述：添加图片和文字水印】 【功能详细描述：功能详细描述】
     * @param srcFile 待加水印文件       (全路径 ： c:/XXXX/***.pdf)
     * @param destFile 加水印后存放地址  (全路径 ： c:/XXXX/***.pdf)
     * @param text 加水印的文本内容
     * @param textWidth 文字横坐标
     * @param textHeight 文字纵坐标
     * @throws Exception
     */
    public static void addWaterMark(String srcFile, String destFile, String text, int textWidth, int textHeight) throws Exception
    {
        // 待加水印的文件
        PdfReader reader = new PdfReader(srcFile);
        // 加完水印的文件
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));
        int total = reader.getNumberOfPages() + 1;
        PdfContentByte content;
        // 设置字体
        BaseFont basefont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);


        //设置透明度
        PdfGState gs = new PdfGState();
        gs.setFillOpacity(1f);
        gs.setStrokeOpacity(1f);
        // 循环对每页插入水印
        for (int i = 1; i < total; i++)
        {
            // 水印的起始
            content = stamper.getUnderContent(i);
            // 开始
            content.beginText();
            // 设置颜色 默认为蓝色
            content.setColorFill(BaseColor.GRAY);
            // 设置字体及字号
            content.setFontAndSize(basefont, 8);
            // 设置起始位置  从下往上  从左往右
            File file = new File(srcFile);
            content.setTextMatrix(textWidth, textHeight);
            // 开始写入水印
            //高
            for (int j = 0; j <6 ; j++) {
                //宽
                for (int k = 0; k < 6 ; k++) {
                    content.showTextAligned(Element.ALIGN_LEFT, text, textWidth+100*k, textHeight+200*j, 45);
                }
            }
            content.endText();
        }
        stamper.close();
    }




}
